package com.example.smssender;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;

/**
 * 短信内容生成器
 * 提供各种场景的短信模板，帮助用户快速生成短信内容
 */
public class SmsContentGenerator {
    
    /**
     * 场景类型枚举
     */
    public enum SceneType {
        FESTIVAL_GREETING("节日祝福"),
        NOTIFICATION("通知"),
        MARKETING("营销"),
        REMINDER("提醒"),
        APOLOGY("道歉"),
        THANKS("感谢"),
        INVITATION("邀请"),
        CONGRATULATION("祝贺");
        
        private String displayName;
        
        SceneType(String displayName) {
            this.displayName = displayName;
        }
        
        public String getDisplayName() {
            return displayName;
        }
    }
    
    /**
     * 场景信息类
     */
    public static class Scene {
        private SceneType type;
        private String name;
        private List<String> templates;
        
        public Scene(SceneType type, String name, List<String> templates) {
            this.type = type;
            this.name = name;
            this.templates = templates;
        }
        
        public SceneType getType() {
            return type;
        }
        
        public String getName() {
            return name;
        }
        
        public List<String> getTemplates() {
            return templates;
        }
    }
    
    /**
     * 获取所有场景列表
     */
    public static List<Scene> getAllScenes() {
        List<Scene> scenes = new ArrayList<>();
        
        // 节日祝福场景
        scenes.add(new Scene(SceneType.FESTIVAL_GREETING, "春节祝福",
            Arrays.asList(
                "新年快乐！愿您在新的一年里身体健康，工作顺利，阖家幸福，万事如意！",
                "春节到，祝福到！祝您新年快乐，身体健康，财源广进，心想事成！",
                "值此新春佳节，祝您和您的家人新年快乐，身体健康，万事如意！"
            )
        ));
        scenes.add(new Scene(SceneType.FESTIVAL_GREETING, "中秋祝福",
            Arrays.asList(
                "中秋佳节，月圆人团圆。祝您中秋快乐，阖家幸福，身体健康！",
                "月圆人圆事事圆满，花好灯好好事连连。祝您中秋节快乐！",
                "中秋月圆，思念如潮。愿您和家人度过一个美好的中秋佳节！"
            )
        ));
        scenes.add(new Scene(SceneType.FESTIVAL_GREETING, "生日祝福",
            Arrays.asList(
                "生日快乐！愿您在新的一岁里身体健康，工作顺利，天天开心！",
                "祝您生日快乐，愿所有的美好都如期而至，愿您永远年轻快乐！",
                "生日快乐！愿您的生活充满阳光，愿您的未来更加精彩！"
            )
        ));
        scenes.add(new Scene(SceneType.FESTIVAL_GREETING, "节日问候",
            Arrays.asList(
                "节日快乐！愿您度过一个愉快的假期，好好休息，享受美好时光！",
                "祝您节日快乐，身体健康，工作顺利，万事如意！",
                "在这个特殊的日子里，祝您节日快乐，幸福安康！"
            )
        ));
        
        // 通知场景
        scenes.add(new Scene(SceneType.NOTIFICATION, "会议通知",
            Arrays.asList(
                "【会议通知】您好，定于明天上午10点在会议室召开重要会议，请准时参加。",
                "【会议通知】明天下午2点召开部门会议，请各位同事准时参加，谢谢配合。",
                "【会议通知】本周五上午9点召开全体员工大会，请准时出席，不得缺席。"
            )
        ));
        scenes.add(new Scene(SceneType.NOTIFICATION, "活动通知",
            Arrays.asList(
                "【活动通知】本周六下午3点将举办团建活动，请各位同事准时参加，地点另行通知。",
                "【活动通知】公司将于下周三举办年会，请各位同事准时参加，期待您的到来。",
                "【活动通知】本周日下午2点举办户外拓展活动，请穿着运动装，准时集合。"
            )
        ));
        scenes.add(new Scene(SceneType.NOTIFICATION, "工作安排",
            Arrays.asList(
                "【工作安排】请于明天上午9点前提交本周工作总结，谢谢配合。",
                "【工作安排】本周五前请完成项目报告，如有问题请及时沟通。",
                "【工作安排】请各位同事在下班前完成今日工作汇报，感谢配合。"
            )
        ));
        scenes.add(new Scene(SceneType.NOTIFICATION, "系统通知",
            Arrays.asList(
                "【系统通知】您的账户有新的变动，请及时查看。如有疑问，请联系客服。",
                "【系统通知】您的订单已发货，请注意查收。感谢您的支持！",
                "【系统通知】您的申请已通过审核，请及时查看详情。"
            )
        ));
        
        // 营销场景
        scenes.add(new Scene(SceneType.MARKETING, "促销活动",
            Arrays.asList(
                "【限时优惠】全场商品8折优惠，活动仅限本周，机会难得，快来选购吧！",
                "【特价促销】新品上市，限时特价，买二送一，数量有限，先到先得！",
                "【优惠活动】会员专享，全场9折，满200减50，活动火热进行中！"
            )
        ));
        scenes.add(new Scene(SceneType.MARKETING, "新品推广",
            Arrays.asList(
                "【新品上市】全新产品震撼上市，品质保证，价格优惠，欢迎咨询购买！",
                "【新品推荐】我们推出了全新系列产品，功能强大，性价比高，值得拥有！",
                "【新品发布】期待已久的新品终于来了，抢先体验，享受优惠价格！"
            )
        ));
        scenes.add(new Scene(SceneType.MARKETING, "会员福利",
            Arrays.asList(
                "【会员专享】尊敬的会员，您有一张优惠券即将到期，请尽快使用。",
                "【会员福利】感谢您的支持，特为您送上专属优惠，详情请查看。",
                "【会员回馈】为感谢您的长期支持，特推出会员专享活动，欢迎参与！"
            )
        ));
        
        // 提醒场景
        scenes.add(new Scene(SceneType.REMINDER, "还款提醒",
            Arrays.asList(
                "【还款提醒】您好，您的账单将于3天后到期，请及时还款，避免逾期。",
                "【还款提醒】您的信用卡账单即将到期，请按时还款，保持良好的信用记录。",
                "【还款提醒】温馨提示：您的贷款将于本月15日到期，请提前准备资金。"
            )
        ));
        scenes.add(new Scene(SceneType.REMINDER, "预约提醒",
            Arrays.asList(
                "【预约提醒】您已预约明天上午10点的服务，请准时到达，如有变动请提前通知。",
                "【预约提醒】您的预约时间为明天下午2点，请提前10分钟到达，谢谢配合。",
                "【预约提醒】温馨提醒：您预约的服务将于明天进行，请做好准备。"
            )
        ));
        scenes.add(new Scene(SceneType.REMINDER, "到期提醒",
            Arrays.asList(
                "【到期提醒】您的会员资格将于7天后到期，续费可享受优惠，请及时续费。",
                "【到期提醒】您的服务将于本月末到期，如需继续使用，请及时续费。",
                "【到期提醒】温馨提示：您的订阅服务即将到期，续费可享受折扣优惠。"
            )
        ));
        scenes.add(new Scene(SceneType.REMINDER, "任务提醒",
            Arrays.asList(
                "【任务提醒】您有一个待办任务即将到期，请及时处理，避免延误。",
                "【任务提醒】请记得完成今天的工作任务，如有困难请及时沟通。",
                "【任务提醒】温馨提醒：您还有未完成的任务，请合理安排时间完成。"
            )
        ));
        
        // 道歉场景
        scenes.add(new Scene(SceneType.APOLOGY, "服务道歉",
            Arrays.asList(
                "非常抱歉给您带来不便，我们会尽快处理您的问题，感谢您的理解与支持。",
                "对于给您造成的不便，我们深表歉意。我们会认真改进，为您提供更好的服务。",
                "抱歉让您久等了，我们会尽快解决您的问题，如有疑问请随时联系我们。"
            )
        ));
        scenes.add(new Scene(SceneType.APOLOGY, "延迟道歉",
            Arrays.asList(
                "非常抱歉，由于特殊原因，原定安排需要延迟，我们会尽快通知新的时间。",
                "抱歉通知您，由于不可抗力因素，原计划需要调整，给您带来不便敬请谅解。",
                "深表歉意，由于突发情况，需要推迟原定安排，我们会尽快与您沟通新的方案。"
            )
        ));
        
        // 感谢场景
        scenes.add(new Scene(SceneType.THANKS, "客户感谢",
            Arrays.asList(
                "感谢您一直以来的支持与信任，我们会继续努力，为您提供更优质的服务！",
                "衷心感谢您的支持，您的满意是我们前进的动力，期待与您继续合作！",
                "感谢您的选择与信任，我们会用心服务每一位客户，祝您生活愉快！"
            )
        ));
        scenes.add(new Scene(SceneType.THANKS, "帮助感谢",
            Arrays.asList(
                "非常感谢您的帮助与支持，您的善意让我们倍感温暖，祝您一切顺利！",
                "衷心感谢您在我困难时伸出援手，这份情谊我会永远铭记在心。",
                "感谢您的帮助，让我能够顺利完成工作，再次向您表示诚挚的谢意！"
            )
        ));
        
        // 邀请场景
        scenes.add(new Scene(SceneType.INVITATION, "活动邀请",
            Arrays.asList(
                "诚挚邀请您参加我们的活动，期待您的到来，共同度过美好时光！",
                "我们诚挚邀请您参加本次活动，您的参与将使活动更加精彩，期待您的光临！",
                "诚邀您参加我们的活动，时间地点已确定，期待与您见面，不见不散！"
            )
        ));
        scenes.add(new Scene(SceneType.INVITATION, "聚会邀请",
            Arrays.asList(
                "好久不见，想邀请您参加我们的聚会，一起聊聊近况，期待您的到来！",
                "诚挚邀请您参加我们的聚会，时间地点已定，期待与您相聚，共度美好时光！",
                "诚邀您参加我们的聚会，老朋友相聚，一起回忆美好时光，不见不散！"
            )
        ));
        
        // 祝贺场景
        scenes.add(new Scene(SceneType.CONGRATULATION, "升职祝贺",
            Arrays.asList(
                "恭喜您升职！这是您努力工作的结果，祝您在新的岗位上再创佳绩！",
                "衷心祝贺您获得晋升，这是对您能力的认可，祝您工作顺利，前程似锦！",
                "恭喜您升职加薪，愿您在新的岗位上发挥更大的才能，取得更大的成就！"
            )
        ));
        scenes.add(new Scene(SceneType.CONGRATULATION, "成功祝贺",
            Arrays.asList(
                "恭喜您取得成功！您的努力终于有了回报，祝您未来更加辉煌！",
                "衷心祝贺您取得的成功，这是您辛勤付出的结果，愿您再接再厉！",
                "恭喜您！您的成功令人敬佩，祝您在未来的道路上越走越远！"
            )
        ));
        
        return scenes;
    }
    
    /**
     * 根据场景类型获取场景列表
     */
    public static List<Scene> getScenesByType(SceneType type) {
        List<Scene> allScenes = getAllScenes();
        List<Scene> filteredScenes = new ArrayList<>();
        for (Scene scene : allScenes) {
            if (scene.getType() == type) {
                filteredScenes.add(scene);
            }
        }
        return filteredScenes;
    }
    
    /**
     * 随机生成指定场景的短信内容
     */
    public static String generateContent(Scene scene) {
        if (scene == null || scene.getTemplates() == null || scene.getTemplates().isEmpty()) {
            return "";
        }
        Random random = new Random();
        int index = random.nextInt(scene.getTemplates().size());
        return scene.getTemplates().get(index);
    }
    
    /**
     * 根据场景名称查找场景
     */
    public static Scene findSceneByName(String name) {
        List<Scene> allScenes = getAllScenes();
        for (Scene scene : allScenes) {
            if (scene.getName().equals(name)) {
                return scene;
            }
        }
        return null;
    }
}

